package token

import (
	"fmt"
)

// Token 词法记号 词法分析器中记录的最小单元
type Token struct {
	Type    Type
	Content string
}

func (t Token) String() string {
	return fmt.Sprintf("%s : %s", t.Type, t.Content)
}

// Tokens 词法记号数组
type Tokens []Token

func (t Tokens) String() string {
	str := ""
	for i := 0; i < len(t); i++ {
		str += fmt.Sprintln(t[i])
	}
	return str
}

func (t Tokens) Peek() *Token {
	if len(t) > 0 {
		return &t[0]
	} else {
		return nil
	}
}
func (t *Tokens) Read() *Token {
	if len(*t) > 0 {
		_out := (*t)[0]
		*t = (*t)[1:]
		return &_out
	} else {
		return nil
	}
}
